module HplAssets.Hephaestus.MetaData where

import FeatureModel.Types
import HplAssets.Hephaestus.Transformation
import HplAssets.Hephaestus.MetaDataTypes
import Data.Map


--
-- An undefined feature model.
-- We do not need an actual feature model for composition.
-- (We only need configuration knowledge and feature configuration.)
--
noFeatureModel :: FeatureModel
noFeatureModel = undefined


--
-- Configuration knowledge for the Hephaestus PL.
--
configurationKnowledge :: [(FeatureExpression, [HephaestusTransformation])]
configurationKnowledge
 = [ (
       ConstantExpression True,
       [SelectEmptyProduct]
     ),
     (
       FeatureRef "Use Cases",
       [SelectAsset "Use Cases"]
     ),
     (
       FeatureRef "Business Processes",
       [SelectAsset "Business Processes"]
     ),
     (
       FeatureRef "Hephaestus",
       [
         --BindProductName "Hephaestus",
         BindProductNameM1 "Hephaestus",
         BindProductNameM2 "HephaestusTypes",
         SelectAsset "Hephaestus"
       ]
     )
   ]


--
-- Metadata about this assets used during composition.
--
assetMetaData = fromList
 [
  ( "Use Cases",
    AssetMetaData {
       assetModuleType = "UCM.Types",
       assetModuleType' = "TestTypes",
       assetModule = "UseCases",
       assetModel = "UseCaseModel",
       assetSelector = "ucm",
       assetSelector' = "splUcm",
       assetEmpty = "emptyUcm",
       assetXType = "UseCaseTransformation",
       assetXFun = "transformUcm"
    }
  ),
  ( "Business Processes",
    AssetMetaData {
       assetModuleType = "BPM.Types",
       assetModuleType' = "TestTypes",
       assetModule = "BusinessProcesses",
       assetModel = "BusinessProcessModel",
       assetSelector = "bpm",
       assetSelector' = "splBpm",
       assetEmpty = "emptyBpm",
       assetXType = "BusinessProcessTransformation",
       assetXFun = "transformBpm"
    }
  ),
  ( "Hephaestus",
    AssetMetaData {
       assetModuleType = "Hephaestus.Types",
       assetModuleType' = "HephaestusTypes",
       assetModule = "Hephaestus",
       assetModel = "HephaestusModel",
       assetSelector = "hpl",
       assetSelector' = "splHpl",
       assetEmpty = "emptyHpl",
       assetXType = "HephaestusTransformation",
       assetXFun = "transformHpl"
    }
  )
 ]
